package Demo;

public class Test1 {
    public static void main(String[] args) {
        //内部类的实例化
        Outter outter = new Outter();
        System.out.println(outter.data1);
        Outter.Inner inner = outter.new Inner();
        //****************************************
        inner.test();
        Outter.Inner inner1 = new Outter().new Inner();
        //获取实例内部类对象的时候依赖于外部类对象
        inner1.test();
        System.out.println(Outter.Inner.data6);
    }
}
class Outter{
    public int data1 = 1;
    private int data2 = 2;
    static  int data3 = 3;
    class  Inner{//实例内部类
        public int data1 = 111;
        public int data4 = 4;
        private  int data5 = 5;
        public static  int data6 = 6;//static是不依赖于任何对象的，但是内部类的实例化需要依赖外部类对象，加上final变为常量
        public void test(){
            System.out.println(data1);//优先访问当前类中的
            System.out.println(Outter.this.data1);//访问外部类的data1，当外部类成员与内部类成员同名时我们可以通过Outter.this.成员来访问外部类的成员
            //实例内部类中是包含外部类的this的
            System.out.println(data4);
            System.out.println(data5);
            System.out.println("内部类的test方法");
        }
    }
    public void test1(){
        System.out.println(data1);
        System.out.println(data2);
        System.out.println("外部类的test方法");
    }
}
